package com.cskaoyan.api.object;

/*
        public String toString()
          a.返回的当前对象的字符串表示。
          b. 通常，toString 方法会返回一个“以文本方式表示”此对象的字符串。
          c. 结果应是一个简明但易于读懂的信息表达式。
          d. 建议所有子类都覆盖此方法

       对象的字符串表示? 简单理解就是该字符串可以表示一个对象的特征
       从对象的差异性的角度理解对象的特征：
       a. 即使两个对象属于同一个类的对象，它们仍然有差别，属性取值
       b. 每个对象的属性取值，就可以表示一个对象的特征(也同时表示对象的状态)

       何为对象的字符串表示 ——> 字符串中包含当前对象所有的属性取值

       注意事项:
         a. 可以用字符串 和 对象做字符串的拼接运算

 */
public class Demo3ToString {

    public static void main(String[] args) {
        int a = 100;
        double b =9.9;
        ToStringClass toStringClass = new ToStringClass(a, b);
        // Object的默认实现
        String s = toStringClass.toString(); // com.cskaoyan.api.object.ToStringClass@1b6d3586
        //System.out.println(s);

        // 对象和字符串做拼接
        String result;
        // 字符串 + 对象：其实计算的是 字符串 和 对象的字符串表示 拼接
        result = "hello, " + toStringClass;
        //System.out.println(result);

        // 输出一个对象，其实输出的是对象的字符串表示，toString方法的结果
        System.out.println(toStringClass);

    }

}

class ToStringClass {

    int a;
    double b;

    public ToStringClass(int a, double b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public String toString() {
        return "ToStringClass { " +
                "a = " + a
                 + ", b = " + b
                + " }";
    }
}
